from typing import Optional, List

from pydantic import constr, Field

from common_bind_service.common.base.db_model import BaseModel, PyObjectId
from common_bind_service.models.param.common_param import TraceParam


class CheckContainerUsefulParam(TraceParam):
    """校验容器是否可用参数"""
    upperpc_code: str  # 上位机编码
    user_code: str  # 员工编码
    equip_code: Optional[str]  # 设备编码
    process_code: Optional[str]  # 工序编码
    vehicle_no: str  # 载具编码


class ProductInfoParam(BaseModel):
    cell_sn: str  # 电芯码
    slot_no: str


class ContainerBindParam(TraceParam):
    """组盘"""
    upperpc_code: str  # 上位机编码
    user_code: str  # 员工编码
    equip_code: Optional[str]  # 设备编码
    process_code: Optional[str]  # 工序编码
    vehicle_no: str  # 载具编码
    cell_list: List[ProductInfoParam]


class ContainerUnBindParam(TraceParam):
    """解盘"""
    upperpc_code: str  # 上位机编码
    user_code: str  # 员工编码
    equip_code: Optional[str]  # 设备编码
    process_code: Optional[str]  # 工序编码
    vehicle_no: str  # 载具编码
    cell_list: Optional[List[ProductInfoParam]]  # 暂时可以不传这个信息


class ProductNgInfoParam(BaseModel):
    cell_sn: str  # 电芯码
    slot_no: str
    ng_code: List[str]  # ng代码 ["E0005","E0010"]


class ContainerRemoveProdParam(TraceParam):
    """解盘"""
    upperpc_code: str  # 上位机编码
    user_code: str  # 员工编码
    equip_code: Optional[str]  # 设备编码
    process_code: Optional[str]  # 工序编码
    vehicle_no: str  # 载具编码
    cell_list: List[ProductNgInfoParam]


class ContainerListParam(TraceParam):
    """解盘"""
    upperpc_code: str  # 上位机编码
    user_code: str  # 员工编码
    equip_code: Optional[str]  # 设备编码
    process_code: Optional[str]  # 工序编码
    vehicle_no: str  # 载具编码
